package org.groupg.practice.guiPractice.awt;

import java.awt.*;

public class GridBagTest {
    private final Frame f = new Frame("测试窗口");
    private final GridBagLayout gb = new GridBagLayout();
    private final GridBagConstraints gbc = new GridBagConstraints();
    private final Button[] bs = new Button[10];

    public static void main(String[] args) {
        new GridBagTest().init();
    }

    public void init() {

        f.setLayout(gb);
        for (var i = 0; i < bs.length; i++) {
            bs[i] = new Button("button" + i);
        }
        // 所有组件都可以在横向、纵向上扩大
        gbc.fill = GridBagConstraints.BOTH;
        gbc.weightx = 1;
        addButton(bs[0]);
        addButton(bs[1]);
        addButton(bs[2]);
        // 该GridBagConstraints控制的GUI组件将会成为横向上或竖向上的下一个组件
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        addButton(bs[3]);
        // 该GridBagConstraints控制的GUI组件在横向上不会扩大
        gbc.weightx = 0;
        addButton(bs[4]);
        // 该GridBagConstraints控制的GUI组件将横跨两个网格
        gbc.gridwidth = 2;
        addButton(bs[5]);
        // 该GridBagConstraints控制的GUI组件将占据一个网格
        gbc.gridwidth = 1;
        // 该GridBagConstraints控制的GUI组件将在纵向上跨越两个网格
        gbc.gridheight = 2;
        // 该GridBagConstraints控制的GUI组件将会成为横向上或竖向上的下一个组件
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        addButton(bs[6]);
        // 该GridBagConstraints控制的GUI组件将横向占据一个网格，纵向跨越两个网格
        gbc.gridwidth = 1;
        gbc.gridheight = 2;
        // 该GridBagConstraints控制的GUI组件纵向扩大的权重是1
        gbc.weighty = 1;
        addButton(bs[7]);
        // 设置下面的按钮在纵向上不会扩大
        gbc.weighty = 0;
        // 该GridBagConstraints控制的GUI组件将会成为横向上或竖向上的下一个组件
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        // 该GridBagConstraints控制的GUI组件将在纵向上占据一个网格
        gbc.gridheight = 1;
        addButton(bs[8]);
        addButton(bs[9]);
        f.pack();
        f.setVisible(true);
//        System.exit(0);
    }

    private void addButton(Button button) {
        gb.setConstraints(button, gbc);
        f.add(button);
    }
}